482. 密钥格式化

482. 密钥格式化

Similar Question

leading to the advanced question

Solution Tips

方案一: 模拟

p9Wem80.png

var licenseKeyFormatting = function(s, k) {
    const ans = [];
    let cnt = 0;

    for (let i = s.length - 1; i >= 0; i--) {
        if (s[i] !== '-') {
            cnt++;
            ans.push(s[i].toUpperCase());
            if (cnt % k === 0) {
                ans.push("-");
            }
        }
    }
    if (ans.length > 0 && ans[ans.length - 1] === '-') {
        ans.pop();
    }
    
    return ans.reverse().join('');
};

方案二: 正则匹配

/**
 * @param {string} s
 * @param {number} k
 * @return {string}
 */
var licenseKeyFormatting = function(s, k) {
    // 可以使用正则, 类似数字千分位分割的逻辑
    // 也可以先把 - 都去除, 然后反向遍历在 k 处添加 - , 同时进行大小写转换
    // 用正则方案吧, 熟悉一下, 但是正则好像不能动态参数
    // 正则方案性能好差
    s = s.replaceAll('-', '').toUpperCase();
    const regex = new RegExp(`(?!^)(?=(\\w{${k}})+$)`, 'g');
    return s.replace(regex, '-');
};

console.log(licenseKeyFormatting('5F3Z-2e-9-w', 4))
console.log(licenseKeyFormatting('2-5g-3-J', 2))